Wozu "DosSupport" ? Bei der Entwicklung des Amiga muß anscheinend Uneinigkeit geherrscht haben. Man könnte fast meinen, es laufen zwei Betriebssysteme in einer Maschine: AmigaDos (in BCPL) und Exec (in C). Da wohl die meisten Amiga-Programmierer in C oder von den Datentypen ähnlichen Sprachen (natürlich auch Modula-2) programmieren, ist es lästig, daß viele Parameter des Dos dem BCPL- und nicht dem Exec-Standard entsprechen. Dieses Modul stellt Prozeduren zur Konvertierung der Datentypen zur Verfügung. Die Datentypen APTR/ADDRESS: Byteaddresse, d.h. eine Adresse wie sie direkt vom 68000-Prozessor verwendet wird. BPTR: BCPL-Pointer bzw. Langwortadresse, also Byteadresse geteilt durch 4. D.h. alle Dos-Strukturen müssen an durch 4 teilbaren (Byte-)Adressen beginnen. Exec/C-Strings: Zeiger (Byteadressen) auf Bytefolgen, die mit einer Null als Endekennzeichen abgeschlossen sind. Auch Modula-Strings sind mit einer Null abgeschlossen. BSTR, Dos/BCPL-Strings: Zeiger (Langwortadressen) auf eine Folge von Bytes - das erste Byte enthält die Länge des Strings [0..255], danach folgt der eigentliche String (ohne Abschlußzeichen). GetDevList Gibt einen Zeiger (Byteadresse) auf die Dos-DeviceList zurück. Dieser berechnet sich aus DosBase°.root°.info°.devInfo, wobei zu beachten ist, daß dieser Ausdruck direkt in Modula keinen Sinn gibt, da die Dos-Zeiger ja BPTRs sind. In der DeviceList sind alle gerade verfügbaren Volumes, Devices und assignierten Directories (logische Devices) aufgelistet. Vorsicht: die Verkettung (mit DeviceList.next) geschieht über BPTRs, nicht mit ExecNodes. BPTRtoADR Wandelt einen BCPL-Pointer in eine in Modula verwendbare ADDRESS um. ADRtoBPTR Wandelte eine ADDRESS in einen BCPL-Pointer. Vorsicht: die Adresse muss durch 4 teilbar sein (Longword-aligned), sonst bricht das Programm mit einer Fehlermeldung ab. BSTRtoStr Kopiert einen BCPL-String in einen Modula-2-gerechten (ARRAY OF CHAR). Aus EinfachheitsgrÜnden wird der String selbst (VAR) und nicht ein Zeiger (so wie in C) übergeben. StrToBSTR Konvertiert einen Modula-2-String in einen BCPL-String, wobei allerdings nur die Bytefolge übergeben wird, kein BSTR (BPTR auf BCPL-String). Den BSTR erhält man mit: StrToBSTR(String); MyBSTR:=ADRtoBPTR(ADR(String)); Dies wurde so gewählt, weil sonst der String in einen eigenen Speicherbereich kopiert werden müßte, den DosSupport allozieren müßte. Dos.def In diesem Verzeichnis befindet sich auch die Datei Dos.def, die bei neueren Versionen des M2Amiga-Compilers mitgeliefert wird. In den alten Handbüchern ist die Beschreibung des Dos-Moduls nicht ganz korrekt. Es wird dort nicht zwischen ADDRESS und BPTR unterschieden, was bei Nichtbeachtung das Programm nach Indien schickt (Guru oder "Modula Unterbruch", meist Address Error). Auch sind die meisten Dos-Prozeduren (z.B. Examine) nicht vom Typ BOOLEAN sondern vom Typ LONGINT. DosBase Zusätzlich wird von DosSupport die Variable DosBase exportiert, die sonst von Modula nur schwer erreichbar ist. Sie darf gelesen, aber niemals verändert werden.Dokumentation zu "DosSupport" Version 1.0Seite Autor: Nicolas Benezan, Postwiesenstr.2, 7000 Stuttgart 60 Nützliche Dos-Prozeduren in Modula